home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
IRIX 6.2 Development Libraries
/
SGI IRIX 6.2 Development Libraries.iso
/
dist
/
complib.idb
/
usr
/
share
/
catman
/
p_man
/
cat3
/
complib
/
fft2du.z
/
fft2du
Wrap
Text File
|
1996-03-14
|
8KB
|
133 lines
ssssccccfffffffftttt2222dddduuuu,,,,ddddzzzzfffffffftttt2222dddduuuu((((3333FFFF)))) ssssccccfffffffftttt2222dddduuuu,,,,ddddzzzzfffffffftttt2222dddduuuu((((3333FFFF))))
NNNNAAAAMMMMEEEE
ssssccccfffffffftttt2222dddduuuu,,,, ddddzzzzfffffffftttt2222dddduuuu ---- 2D, Real to Complex, Direct Fast Fourier Transforms.
SSSSYYYYNNNNOOOOPPPPSSSSYYYYSSSS
_F_o_r_t_r_a_n :
ssssuuuubbbbrrrroooouuuuttttiiiinnnneeee ssssccccfffffffftttt2222dddduuuu(((( ssssiiiiggggnnnn,,,, nnnn1111,,,, nnnn2222,,,, aaaarrrrrrrraaaayyyy,,,, llllddddaaaa,,,, ccccooooeeeeffff ))))
iiiinnnntttteeeeggggeeeerrrr ssssiiiiggggnnnn,,,, nnnn1111,,,, nnnn2222,,,, llllddddaaaa
rrrreeeeaaaallll aaaarrrrrrrraaaayyyy((((llllddddaaaa,,,,nnnn2222)))),,,, ccccooooeeeeffff((((((((nnnn1111++++11115555))))++++2222****((((nnnn2222++++11115555))))))))
ssssuuuubbbbrrrroooouuuuttttiiiinnnneeee ddddzzzzfffffffftttt2222dddduuuu(((( ssssiiiiggggnnnn,,,, nnnn1111,,,, nnnn2222,,,, aaaarrrrrrrraaaayyyy,,,, llllddddaaaa,,,, ccccooooeeeeffff ))))
iiiinnnntttteeeeggggeeeerrrr ssssiiiiggggnnnn,,,, nnnn1111,,,, nnnn2222,,,, llllddddaaaa
rrrreeeeaaaallll****8888 aaaarrrrrrrraaaayyyy((((llllddddaaaa,,,,nnnn2222)))),,,, ccccooooeeeeffff((((((((nnnn1111++++11115555))))++++2222****((((nnnn2222++++11115555))))))))
_C :
####iiiinnnncccclllluuuuddddeeee <<<<fffffffftttt....hhhh>>>>
iiiinnnntttt ssssccccfffffffftttt2222dddduuuu (((( iiiinnnntttt ssssiiiiggggnnnn,,,, iiiinnnntttt nnnn1111,,,, iiiinnnntttt nnnn2222,,,, ffffllllooooaaaatttt ****aaaarrrrrrrraaaayyyy,,,,
iiiinnnntttt llllddddaaaa,,,, ffffllllooooaaaatttt ****ccccooooeeeeffff))));;;;
iiiinnnntttt ddddzzzzfffffffftttt2222dddduuuu (((( iiiinnnntttt ssssiiiiggggnnnn,,,, iiiinnnntttt nnnn1111,,,, iiiinnnntttt nnnn2222,,,, ddddoooouuuubbbblllleeee ****aaaarrrrrrrraaaayyyy,,,,
iiiinnnntttt llllddddaaaa,,,, ddddoooouuuubbbblllleeee ****ccccooooeeeeffff))));;;;
DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
ssssccccfffffffftttt2222dddduuuu and ddddzzzzfffffffftttt2222dddduuuu compute in place the complex Fourier transform of
real 2D sequence of size N1 x N2. The value F{k,l} of the transform of
the 2D sequence f{i,j} is equal to:
F{k,l} = Sum ( W1^(i*k) * W2^(j*l) * f{i,j} ),
for i =0,...,(N1-1), j=0,...,(n2-1)
W1 = exp( (Sign*2*sqrt(-1)*PI) / N1 )
W2 = exp( (Sign*2*sqrt(-1)*PI) / N2 )
SSSSttttoooorrrraaaaggggeeee
It is assumed that the (N1 x N2) 2D sequence is stored along dimension
N1. So the index {i+1,j} has an offset of 1 element with respect to
{i,j}, and {i,j+1} an offset of _l_d_a elements with respect to {i,j}.
NNNNOOOOTTTTEEEE :::: lda must be larger (or equal) to 2*((N1+2)/2).
AAAAllllggggoooorrrriiiitttthhhhmmmm
The real-to-complex Direct 2D Fourier transform is computed with a row-
column approach.
- First, N2 FFTs real-to-complex of size N1 are evaluated, stride = 1
and leading_dimension=lda.
- then, N1 FFTs complex-to-complex of size N2 are preformed,
stride=lda/2, and leading_dimension=1.
As the input sequence has real values, only half of the results are
computed since the sample {(N1-k),l} of the real-to-complex transform
would be the conjugate of the sample {k,l}.
However, some extra space is necessary, and the relation
(lda>=2*((N1+2)/2)) must hold.
PPPPaaaaggggeeee 1111
ssssccccfffffffftttt2222dddduuuu,,,,ddddzzzzfffffffftttt2222dddduuuu((((3333FFFF)))) ssssccccfffffffftttt2222dddduuuu,,,,ddddzzzzfffffffftttt2222dddduuuu((((3333FFFF))))
PPPPAAAARRRRAAAAMMMMEEEETTTTEEEERRRRSSSS
SSSSIIIIGGGGNNNN Integer specifying which sign to be used for the expression of W
(see above) - must be either +1 or -1.
Unchanged on exit.
NNNN1111 Integer, the first dimension size of the 2D sequence.
Unchanged on exit.
NNNN2222 Integer, the second dimension size of the 2D sequence.
Unchanged on exit.
AAAARRRRRRRRAAAAYYYY Array containing the samples of the 2D sequence to be transformed.
On input, the element {i,j} of the sequence is stored as A(i,j) in
_F_o_r_t_r_a_n , and A[i+j*lda] in _C.
On exit, the array is overwritten by its transform.
LLLLDDDDAAAA Integer, leading dimension: increment between the samples of two
consecutive sub-sequences (e.g between {i,j+1} and {i,j} ).
Unchanged on exit.
CCCCOOOOEEEEFFFFFFFF Array of at least ( (N+15)+2*(N2+15) ) elements. On entry it
contains the Sines/Cosines and factorization of N. COEFF needs to be
initialized with a call to scfft2dui or dzfft2dui. Unchanged on
exit.
EEEExxxxaaaammmmpppplllleeee ooooffff CCCCaaaalllllllliiiinnnngggg SSSSeeeeqqqquuuueeeennnncccceeee
2D FFTs computed on a 64*1024 sequence of real values. The elements of
each sequence are stored with increment (stride) 1, and the offset
between the first element of two succesive sequence (leading dimension)
is 1026.
Note : 1026 >= 1024+2 .
_F_o_r_t_r_a_n
real array(0:1026-1,0:64-1), coeff(1024+15 + 2*(64+15))
call scfft2dui( 1024, 64, coeff)
call scfft2du( -1, 1024, 64, array, 1026, coeff)
_C
#include <fft.h>
float array[64*1026], *coeff;
coeff = scfft2dui( 1024, 64, NULL);
scfft2du( -1, 1024, 64, array, 1026, coeff);
SSSSEEEEEEEE AAAALLLLSSSSOOOO
fft, scfft2dui, dzfft2dui, scfft1du, dzfft1du, csfft2du, zdfft2du
PPPPaaaaggggeeee 2222